package com.bridge.demo1;

import com.bridge.demo1.impl.Bus;
import com.bridge.demo1.impl.Car;
import com.bridge.demo1.impl.SpeedWay;
import com.bridge.demo1.impl.Street;

/**
 * 生活中的一个例子:
 * 拿汽车在路上行驶的来说。既有小汽车又有公共汽车，它们都不但能在市区中的公路上行驶，也能在高速公路上行驶。这你会发现，对于交通工具（汽车）
 * 有不同的类型，它们所行驶的环境（路）也有不同类型，在软件系统中就要适应两个方面（不同车型，不同道路）的变化，怎样实现才能应对这种变化呢？ 概述:
 * 在软件系统中 ，某些类型由于自身的逻辑，它具有两个或多个维度的变化，那么如何应对这种“多维度的变化”
 * ？如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化 ，而又不引入额外的复杂度？这就要使用Bridge模式。
 * 
 * @author Administrator
 *
 */
public class Test {

	/**
	 * 可以看到，通过对象组合的方式，Bridge
	 * 模式把两个角色之间的继承关系改为了耦合的关系，从而使这两者可以从容自若的各自独立的变化，这也是Bridge模式的本意。
	 * 这样增加了客户程序与路与汽车的耦合
	 * 。其实这样的担心是没有必要的，因为这种耦合性是由于对象的创建所带来的，完全可以用创建型模式去解决。在应用时结合创建型设计模式来处理具体的问题。
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		AbstractRoad speedWay = new SpeedWay();
		speedWay.aCar = new Car();
		speedWay.run();

		AbstractRoad street = new Street();
		street.aCar = new Bus();
		street.run();
	}

}
